perm filename WIX3LB.SAI[VIS,HPM] blob
sn#178250 filedate 1975-10-12 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 entry normalize, synchronize,diminterest,interest
C00005 00003 internal INTEGER PROCEDURE diminterest(REFERENCE INTEGER PICTURE INTEGER IW)
C00010 ENDMK
C⊗;
entry normalize, synchronize,diminterest,interest;
begin
require "pixnic.sai" source_file;
EXTERNAL INTEGER PROCEDURE INTRST(REFERENCE INTEGER PICTURE;
INTEGER WINSIZ;
REFERENCE INTEGER RESULTARRY);
EXTERNAL PROCEDURE GETPAR(REFERENCE INTEGER ARRY, PICTR);
EXTERNAL PROCEDURE PERBIT(REFERENCE INTEGER PICTURE, PERMUTATION);
EXTERNAL PROCEDURE HISTOG(REFERENCE INTEGER PICTURE, HISTOGRAM);
EXTERNAL PROCEDURE ROWSUM(REFERENCE INTEGER PICTURE, RWSUM);
EXTERNAL PROCEDURE ROWSUD(REFERENCE INTEGER PICTURE, RWSUM);
EXTERNAL INTEGER PROCEDURE CMPPAR(REFERENCE INTEGER PIC1,PIC2);
EXTERNAL INTEGER PROCEDURE BSTCOR(REFERENCE INTEGER PIC1,SY1,SX1,SY2,SX2;
REFERENCE INTEGER PIC2,DY1,DX1,DY2,DX2);
EXTERNAL PROCEDURE CLEAN(REFERENCE INTEGER PICTURE);
EXTERNAL PROCEDURE PASSHI(REFERENCE INTEGER PICTURE1;
INTEGER WINSIZ;
REFERENCE INTEGER PICTURE2);
EXTERNAL PROCEDURE HAFPIC(REFERENCE INTEGER PICTURE1,PICTURE2; INTEGER MAXBIT);
EXTERNAL PROCEDURE COPPIC(REFERENCE INTEGER PICTURE1,PICTURE2);
EXTERNAL INTEGER PROCEDURE MATCH(REFERENCE INTEGER PIC1,SY1,SX1,SY2,SX2;
REFERENCE INTEGER PIC2,DY1,DX1,DY2,DX2);
EXTERNAL PROCEDURE UNPACK(REFERENCE INTEGER SOURCEARRAY, PICTURE);
EXTERNAL PROCEDURE SELECT(REFERENCE INTEGER PICT1; INTEGER YEDGE,XEDGE;
REFERENCE INTEGER PICT2);
internal INTEGER PROCEDURE diminterest(REFERENCE INTEGER PICTURE; INTEGER IW);
BEGIN
INTEGER HIG,WID,BITS;
HIG←MEMORY[LOCATION(PICTURE)+PCLN];
WID←MEMORY[LOCATION(PICTURE)+LNBY];
BITS←MEMORY[LOCATION(PICTURE)+BYBI];
RETURN(PIXDIM((HIG-1)%IW,(WID-1)%IW,10));
END;
internal PROCEDURE INTEREST(REFERENCE INTEGER PICTURE; INTEGER IW;
REFERENCE INTEGER RESULT);
BEGIN
INTEGER HIG,WID,BITS,IAV,I,J,IWW,BYMAX;
EXTERNAL PROCEDURE GETPAR(REFERENCE INTEGER ARY, PICT);
HIG←MEMORY[LOCATION(PICTURE)+PCLN];
WID←MEMORY[LOCATION(PICTURE)+LNBY];
BITS←MEMORY[LOCATION(PICTURE)+BYBI];
BEGIN
INTEGER ARRAY INTER[-2:(HIG-1)%IW-1,0:(WID-1)%IW-1];
IAV←INTRST(PICTURE,IW,INTER[0,0]);
IWW←IW*IW;
BYMAX←2↑BITS-1;
FOR I←(HIG-1)%IW-1 STEP -1 UNTIL 0 DO
FOR J←(WID-1)%IW-1 STEP -1 UNTIL 0 DO
INTER[I,J]←8*SQRT(INTER[I,J]/IWW) MIN BYMAX;
MAKPIX((HIG-1)%IW,(WID-1)%IW,BITS,RESULT);
GETPAR(INTER[0,0],RESULT);
END;
END;
internal PROCEDURE NORMALIZE(REFERENCE INTEGER PIC);
BEGIN
INTEGER INTEG,I,TOT,BITS,SAMPS;
BITS←MEMORY[LOCATION(PIC)+BYBI];
SAMPS←2↑BITS;
BEGIN
INTEGER ARRAY GREYS[0:SAMPS-1];
HISTOG(PIC,GREYS[0]);
TOT←0;
FOR I←0 STEP 1 UNTIL SAMPS-1 DO TOT←TOT+GREYS[I];
INTEG←0;
FOR I←0 STEP 1 UNTIL SAMPS-1 DO
BEGIN
INTEG←INTEG+GREYS[I];
GREYS[I]←(SAMPS-1)*INTEG/TOT;
END;
PERBIT(PIC,GREYS[0]);
END;
END;
internal PROCEDURE SYNCHRONIZE(REFERENCE INTEGER PIC);
BEGIN
INTEGER I,J,K,WINVAL,WINPOS,HIG;
HIG←MEMORY[LOCATION(PIC)+PCLN];
BEGIN
INTEGER ARRAY ROWSM[0:HIG-1];
INTEGER RETRACE,TRIALVAL;
ROWSUD(PIC,ROWSM[0]);
RETRACE←HIG%19;
WINPOS←RETRACE-1;
WINVAL←0;
FOR I←0 STEP 1 UNTIL WINPOS DO WINVAL←WINVAL+ROWSM[I];
TRIALVAL←WINVAL;
FOR J←RETRACE STEP 1 UNTIL HIG+RETRACE-1 DO
BEGIN
INTEGER JJ;
JJ←J MOD HIG;
TRIALVAL←TRIALVAL-ROWSM[J-RETRACE]+ROWSM[JJ];
IF TRIALVAL≤WINVAL THEN
BEGIN
WINVAL←TRIALVAL;
WINPOS←JJ;
END;
END;
END;
IF WINPOS<HIG-1 THEN
BEGIN
INTEGER BODY,BODYSIZ;
INTEGER ARRAY COPY[0:BODYSIZ←MEMORY[LOCATION(PIC)+PCWD]];
BODY←MEMORY[LOCATION(PIC)+LINTAB];
WINPOS←WINPOS*MEMORY[LOCATION(PIC)+LNWD];
ARRBLT(COPY[0],MEMORY[BODY+WINPOS],BODYSIZ-WINPOS);
ARRBLT(COPY[BODYSIZ-WINPOS],MEMORY[BODY],WINPOS);
ARRBLT(MEMORY[BODY],COPY[0],BODYSIZ);
END;
END;
end